package qdu.szmt.szmt_cont_prov;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
/*
    Contentprovider 需要重写6个函数
    1. oncreate 负责数据初始化工作，在每次被访问时回调
    一般创建数据管理对象（当前数据库管理对象Mydbadpt）

    2. 增删改查
       2.1 首先定义Uri的表示方式
       协议：//host：port/path/key=value
       在contentprovider中，协议总是  content://
       host相当于intent的action，可以唯一确定一个contentprovider对象，
       contentprovider也需要在清单文件中注册，

       2.2 insert
       参数1： uri对应provider中的某一个抽象表； 参数2： 待插入的数据
       返回类型是新生成的行对应的uri， 若失败返回空
*/
public class SM_prvd extends ContentProvider {
    Mydbadpt mydbadpt;
    static String uri_str = "content://qdu.szmt.szmt_cont_prov";
    static String multi_path = "/mydata";//用path第一级别表示表名
    //static String multi_path2 = "/mydata2";
    //uri_str + multi_path -> content://qdu.szmt.szmt_cont_prov/mydata
    //uri_str + multi_path2
    static String item_path = "/mydata/#"; //#是通配符，匹配任意的行号（integer）
    //uri_str + item_path -> content://qdu.szmt.szmt_cont_prov/mydata/#

    @Nullable
    @Override
    public String getType(@NonNull Uri uri) {
        return null;
    }

    @Override
    public boolean onCreate() {
        mydbadpt = new Mydbadpt(SM_prvd.this.getContext());
        return true;
    }

    @Nullable
    @Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
        return null;
    }

    @Nullable
    @Override
    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
        long newid = -1;
        if((uri_str+multi_path).equals(uri.toString())){
            if(mydbadpt != null) {
                mydbadpt.opendb();
                newid = mydbadpt.insertdata(values);
                mydbadpt.closedb();
                if(newid > 0)
                    return Uri.parse(uri_str+multi_path+"/"+newid);
            }
        }
        return null;
    }

    @Override
    public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
        return 0;
    }

    @Override
    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
        return 0;
    }
}
